<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Redis;

class StoreSeckillController extends Controller
{
    public function index(){



    }




    /*
     * 将数据表中的 秒杀商品 加入 redis 队列中
     */
    public function indexRedis(){
        //获取秒杀表中的全部数据
        $users =DB::table('store_seckill')->select('id','stock')->get();
        $users=json_decode(json_encode($users),true);

        Redis::select(3);
        //将数据循环添加到 队列中

        foreach ($users as $val){
            $key="goods_".$val['id'];
           for ($i=0; $val['stock']>$i;$i++){

                Redis::lpush($key,$i);

           }
        }
    }




    /*
     * 当秒杀商品添加时
     */
    public function store(Request $request){

     //  $params = $request->except('_token');
        $params['image']="fds";
        $params['stock']=800;
        $res =DB::table('store_seckill')->insertGetId($params);

        //当用户添加秒杀商品成功后    此处可以通过观察者模式进行优化
        if ($res){

            //将当前 商品 存入 redis队列中
            $stock=DB::table('store_seckill')->select('stock')->find($res);
          //  var_dump($stock->stock); die();
           Redis::select(3);

            for ($i=0; $stock->stock>$i;$i++){

                Redis::lpush('goods_'.$res,$res."_".$i);
            }

        }

    }

    /*
     * 当用户点击秒杀时
     */
    public function getStoreSeckill(Request $request){

        //当用户点击秒杀时 进入次路由方法

        //首先获取前端传入的商品id
        $goodsId=$request->get('id');
        $key='goods_1';

        Redis::select(3);
        //redis  判断 当前商品是否有队列 也就是库存
        if (Redis::llen($key)>0){

          if (Redis::lpop($key)){
              dd(1);
              $order_sn = 'pyg' . date('YmdHis') . str_pad('user_id', 10, 0, STR_PAD_LEFT);
              $orderCreate = [
                  'order_sn' => $order_sn,
                  'user_id' => 2,
              ];
              try {
                  DB::beginTransaction();
                  //订单生成
                  $order = Order::create($orderCreate);
                  //如果删除成功 那么  创建订单号  生成订单

                  //秒杀库存-1

                  //生成日志
                  //使用事务 统一执行

                  //跳转订单页面


                  //。。。
                  return ['msg'=>"秒杀成功"];
              }catch (\Exception $exception){

                  return ['msg'=>$exception->getMessage()];

              }

          }
          return ['msg'=>"秒杀成功，请联系关联员"];

        }
          return ['msg'=>"秒杀失败，下次加油"];

    }


    /*
     * 秒杀后 支付啥的
     */
    public function SeckillPush(){


    }


    /*
     * 排行榜利用 redis 有序集合  进行自动排列
     */
    public function classes(){
        Redis::select(5);
                // redis_key  排序号  value（名）
        Redis::zadd('class_ff','12','sff');
        Redis::zadd('class_ff','13','ddff');
        Redis::zadd('class_ff','14','ff');

        Redis::zadd('class_ff','15','ffds');
        Redis::zadd('class_ff','16','fff');
        Redis::zadd('class_ff','17','gff');
        Redis::zadd('class_ff','18','gff');

        $res=Redis::ZREVRANGE('class_ff',0,18);//正序
        $ress=Redis::ZRANGE('class_ff',0,18);//倒序
        dd($ress,$res);
    }
}
